/**
 * Created by ruiqizhang on 6/23/16.
 */

import java.util.concurrent.TimeUnit;

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;

//http://blog.csdn.net/ruishenh/article/details/22390809import java.util.concurrent.TimeUnit;

public class Producer {
	public static void main(String[] args) throws MQClientException, InterruptedException {
		/**
		 * 一个应用创建一个Producer，由应用来维护此对象，可以设置为全局对象或者单例<br>
		 * 注意：ProducerGroupName需要由应用来保证唯一<br>
		 * ProducerGroup这个概念发送普通的消息时，作用不大，但是发送分布式事务消息时，比较关键，
		 * 因为服务器会回查这个Group下的任意一个Producer
		 */
		DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
		// producer.setNamesrvAddr("192.168.11.184:9876");
		// producer.setNamesrvAddr("10.0.4.3:9876");
//		producer.setNamesrvAddr("127.0.0.1:9876");
//		producer.setNamesrvAddr("10.1.241.91:9876");
		producer.setNamesrvAddr("10.1.241.140:9876");
		producer.setInstanceName("Producer");

		/**
		 * Producer对象在使用之前必须要调用start初始化，初始化一次即可<br>
		 * 注意：切记不可以在每次发送消息时，都调用start方法
		 */
		// producer.setCreateTopicKey("OrderID001");
		System.out.println(producer);

		producer.start();

		// producer.createTopic("OrderID001", "TopicTest1", 0);

		/**
		 * 下面这段代码表明一个Producer对象可以发送多个topic，多个tag的消息。
		 * 注意：send方法是同步调用，只要不抛异常就标识成功。但是发送成功也可会有多种状态，<br>
		 * 例如消息写入Master成功，但是Slave不成功，这种情况消息属于成功，但是对于个别应用如果对消息可靠性要求极高，<br>
		 * 需要对这种情况做处理。另外，消息可能会存在发送失败的情况，失败重试由应用来处理。
		 */
		for (int i = 0; i < 100; i++) {
			try {
				{
//					Message msg = new Message("TopicTest1", // topic
					/*Message msg = new Message("trade", // topic
							"TagA", // tag
							"OrderID001", // key
							("Hello MetaQ TopicTest1").getBytes());*/// body
					
					Message msg = new Message("ORDER_TOPIC", // topic
							"WLD_TRADE_SUCCESS_TAG", // tag
							"OrderID001", // key
							("Hello MetaQ TopicTest1").getBytes());// body
					SendResult sendResult = producer.send(msg);
					System.out.println(sendResult);
				}

				/*{
					Message msg = new Message("TopicTest2", // topic
							"TagB", // tag
							"OrderID0034", // key
							("Hello MetaQ TopicTest2").getBytes());// body
					SendResult sendResult = producer.send(msg);
					System.out.println(sendResult);
				}*/

				/*{
					Message msg = new Message("TopicTest3", // topic
							"TagC", // tag
							"OrderID061", // key
							("Hello MetaQ TopicTest3").getBytes());// body
					SendResult sendResult = producer.send(msg);
					System.out.println(sendResult);
				}*/
			} catch (Exception e) {
				e.printStackTrace();
			}
			TimeUnit.MILLISECONDS.sleep(1000);
		}

		/**
		 * 应用退出时，要调用shutdown来清理资源，关闭网络连接，从MetaQ服务器上注销自己
		 * 注意：我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法
		 */
		producer.shutdown();
	}
}
